﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Dosimetria.Models.DataAnnotations_Classes;

namespace Dosimetria.Shared
{
    public static class TXT
    {

        public static string formatoTXT(List<Dosimetro> lDosimetro, string tipoDosimetro)
        {
            string text = "";
            switch (tipoDosimetro)
            {
                case "PD3":
                    text = formatoNOTPD5FILM(lDosimetro);
                    break;
                case "PD5":
                    text = formatoNOTPD5FILM(lDosimetro);
                    break;
                case "PD3(6/7)":
                    text = formatoNOTPD5FILM(lDosimetro);
                    break;
                case "A":
                    text = formatoNOTPD5FILM(lDosimetro);
                    break;
                case "333":
                    text = formatoNOTPD5FILM(lDosimetro);
                    break;
                case "PD5-FILM":
                    foreach (Dosimetro d in lDosimetro)
                    {
                        text += d.codigoDosimetro + "\t" + "\t" + "\t"  + d.fechaRecepcion + "\t" + d.Contrato.codigoContrato + "\t" +
                               d.dfun_fecha + "\t" + d.codigoLogicoDosimetro + "\t" + d.tipoDosimetro + "\t" + d.Funcionario.nombre.Trim() + Environment.NewLine;
                    }
                    break;
            }
            //Funcional para pd3
           
            return text;
        }


        private static string formatoNOTPD5FILM(List<Dosimetro> lDosimetro){
             string text = "";
             int num = 1;
            foreach (Dosimetro d in lDosimetro)
            {
               
                text += formatTextSpaceFirst(5,num.ToString()) + ", " + "\"" + formatoTexto(16, d.codigoLogicoDosimetro.ToString()) + "\"" + ", " + "\"100LD           \"" + ", " +
                        "\"" + formatoTexto(16,obtenerParteNombre(d.Funcionario.nombre.Trim())[0] ) + "\"" + ", " + "\"" + formatoTexto(16, d.Contrato.codigoContrato.ToString()) + "\"" +
                        ", " + "\"" + formatoTexto(16, num.ToString()) + "\"" + Environment.NewLine;
                //Concateno con el mismo valor para generar dos veces la misma linea
                text += formatTextSpaceFirst(5, (++num).ToString()) + ", " + "\"" + formatoTexto(16, d.codigoLogicoDosimetro.ToString()) + "\"" + ", " + "\"100LD           \"" + ", " +
                        "\"" + formatoTexto(16, obtenerParteNombre(d.Funcionario.nombre.Trim())[0]) + "\"" + ", " + "\"" + formatoTexto(16, d.Contrato.codigoContrato.ToString()) + "\"" +
                        ", " + "\"" + formatoTexto(16, num.ToString()) + "\"" + Environment.NewLine;
               
                num++;
            }
            return text;
        }


        private static string formatTextSpaceFirst(int totalLength, string text)
        {
            while (text.Length <= totalLength)
            {
                text = " " + text;
            }
            return text;
        }

        /// <summary>
        /// Metodo que agrega espacios en la parte posterior del texto
        /// </summary>
        /// <param name="lengthTotal"></param>
        /// <param name="text"></param>
        /// <returns></returns>
        private static string formatoTexto(int lengthTotal, string text)
        {
            while (text.Length <= lengthTotal)
            {
                text += " ";
            }
            return text;
        }


       
        /// <summary>
        /// 
        /// </summary>
        /// <param name="nombreCompleto"></param>
        /// <returns></returns>
        private static string[] obtenerParteNombre(string nombreCompleto)
        {
            string[] nombre = new string[4];
            int i = 0;
            string parteNombre = "";
            foreach (char c in nombreCompleto.ToCharArray())
            {
                if (c.Equals(' '))
                {
                    nombre[i] = parteNombre;
                    parteNombre = "";
                    i++;
                }
                else
                {
                    parteNombre += c;
                }
            }
            return nombre;
        }
    }
}